/* 
 * AgenteExisteRule.java
 * 
 * Data de criação: 12/10/2010
 * 
 * O2 SOLUTIONS - SOLUÇÕES EM TECNOLOGIA DA INFORMAÇÃO. 
 *
 */
package br.com.o2solutions.siso.business.rule.agente;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import br.com.o2solutions.core.exception.BusinessException;
import br.com.o2solutions.core.exception.enumerator.ExceptionScope;
import br.com.o2solutions.core.integration.repository.DataBaseIntegration;
import br.com.o2solutions.core.service.rule.Rule;
import br.com.o2solutions.siso.integration.entidade.Agente;
import br.com.o2solutions.util.assertion.Assert;
import br.com.o2solutions.util.collection.CollectionUtil;

/**
 * Classe responsável por
 * 
 * @author osvaldeir
 * @since 12/10/2010
 * 
 */
@Component("agenteExisteRule")
public class AgenteNotNullIdRule implements Rule<Agente> {

	@Value("#{agenteDAO}")
	private DataBaseIntegration<Agente> agenteDAO;

	/**
	 * {@inheritDoc} Verifica se o {@link Agente} é uma entidade persistida e,
	 * caso negativo, lança uma {@link BusinessException} informando a
	 * inexistência e uma chave com o valor <b>error.agente.null</b> ou
	 * <b>error.agente.id.null</b> caso o identificador do agente esteja nulo.
	 */
	@Override
	public void check(Agente entity) throws BusinessException {
		Assert.notNull(entity.getId(), new BusinessException(
				"O Identificador do agente não pode ser nulo",
				"error.agente.id.null", ExceptionScope.BUSINESS_VALIDATION));
		Agente firstObject = CollectionUtil.getFirstObject(agenteDAO
				.findByNamedQuery("Agente.findById", entity.getId()));
		Assert.notNull(firstObject, new BusinessException(
				"Agente não cadastrado", "error.agente.null",
				ExceptionScope.BUSINESS_VALIDATION));
	}

}
